AWS CLIを使ってCognitoユーザーステータスのFORCE_CHANGE_PASSWORDをCONFIRMEDにしてみる
どうも!大阪オフィスの西村祐二です。
今日はクラスメソッドの創立記念日で15年目に突入したそうです。ということで今日もブログを書いていきます。テーマはCognitoです。
Cognitoを使う際に検証やテストのために、ユーザを追加したいことがあるかと思います。
マネージメントコンソールでユーザを追加すると必ず「FORCE_CHANGE_PASSWORD」というステータスでユーザが作成されます。このステータスのユーザーはユーザ自身でパスワードを変更する必要があります。そのため、マネージメントコンソールからユーザーステータスを変更することはできません。
つまり、パスワード変更のためにSDKを使ったWEBページを別途用意したりする必要があります。
が、AWS CLIから「FORCE_CHANGE_PASSWORD」のステータスを「CONFIRMED」に変更する方法をみつけたので紹介したいと思います。
※通常、検証やテストのためにユーザを追加する際はマネージメントコンソールではなく、AWS CLIからユーザを追加することが多いです。最後に付録としてコマンドを記載しています。
さっそくやっていきましょう!
Cognitoユーザプールの作成
マネージメントコンソールから作成します。設定はデフォルトのまま作成しています。
アプリクライアントを追加
ユーザプールが作成できたら、次はアプリクライアントを追加します。
必ず、「サーバーベースの認証でサインイン API を有効にする (ADMIN_NO_SRP_AUTH)」にチェックをつけてください。
マネージメントコンソールからユーザ追加
マネージメントコンソールからユーザ追加します。
今回、test
というユーザを追加します。仮パスワードをPassw0rd!
としています。メールアドレスも適当に設定しています。
追加すると下記画像のようにステータスが「FORCE_CHANGE_PASSWORD」として追加されます。
AWC CLIからステータスを変更にする
下記コマンドでセッション情報を取得します。
$ aws cognito-idp admin-initiate-auth \ --user-pool-id ap-northeast-1_xxxxxxxxx \ --client-id xxxxxxxxxxxxxxxxxxxxx \ --auth-flow ADMIN_NO_SRP_AUTH \ --auth-parameters \ USERNAME=test,PASSWORD=Passw0rd!
成功とすると、下記のようなレスポンスが返ってきます。
{ "ChallengeName": "NEW_PASSWORD_REQUIRED", "Session": "mVvjpL7DgH9EYlZ3AJVozh0b1O5av4-HFBwzIzb5oN7smiGwKxXrWdVJkrp_65cZ11ggQ4qt3lhhp9KiAiKFem61iJS4F_l64laOyHLF3VVzPaFg1UQaWIK1vR13gkxIkBGl4oE1abb5Jqi_kIzTnLahOPW59YRynnWr8WSV7k4IZ2yhMI7Hf8iDQZCPzQ4N5b13J5gPPJrk6wchGyypGJK5bSFppTV2ScOn4oNySQ0j-6OzN8vQF102YaEKemkz05-XU5vF8PdvuNjFYCwJL4Blkt2FjpfUpa6bKOBT0HcvE2dpVNeRnN6w3GnwNijdno1pfXjhBKltpn95RJE3eIMdOhUXqDDGsisN4Au66i7gDwPtZDMAWswGHnb-JTqQ32a9CKT5bvk16OS-3o3x_iuKe9t3tRNIrZ527k9KJQZujT-H7CByznXsfVVDVx5HawEtDgAD-O4OG4h5mmdAksaAypg9yDPf2FMa6STlnOdQkTufGpWuDLHsKvcpnK1w_VowhgNfkkMt1ch-toQ-iES11TGk-c1u1BKoKrBFLse9D2D9UIKHqsKP5F4YkB410u9Byj1XIZV3ENcNXms-foFDaoXIB5mSpVRo-oIc5qxgdnuuM38WpAWbvBm4ea730VMj9hA1Ifz4qKbcCcGzLHm-QuZv1LYuWFOcwZ1hy3MiwQQgWlYwcVZ78VYbc4uRbacmWMhJG8fR0tZQAuDBVLRVKFZViIUYlfZpe9iWf9Wr2q-2YMRCd2gLPCY8micRnGwoZy5LZbk3C4rB6LBKgWl2uMge5umQfhIgREQ_-QSrbDy0tgDwFGbL8avO5EfcjQwngg", "ChallengeParameters": { "USER_ID_FOR_SRP": "test", "requiredAttributes": "[]", "userAttributes": "{\"email_verified\":\"true\",\"email\":\"test@admin.com\"}" } }
下記コマンドで新しいパスワードを設定します。今回はPassw0rd!!
というパスワードにしています。
--session
では上記のレスポンスで取得したSession
の値を使用します。
注意点として、マネージメントコンソールでメールアドレスの設定しないでユーザ追加をした場合は--challenge-responses
のところで、--challenge-responses NEW_PASSWORD='Passw0rd!!',USERNAME=test,userAttributes.email=test@admin.com
のようにuserAttributes.email
を追加する必要があります。
$ aws cognito-idp admin-respond-to-auth-challenge \ --user-pool-id ap-northeast-1_xxxxxxxxx \ --client-id xxxxxxxxxxxxxxxxxxxxx \ --challenge-name NEW_PASSWORD_REQUIRED \ --challenge-responses NEW_PASSWORD='Passw0rd!!',USERNAME=test \ --session "mVvjpL7DgH9EYlZ3AJVozh0b1O5av4-HFBwzIzb5oN7smiGwKxXrWdVJkrp_65cZ11ggQ4qt3lhhp9KiAiKFem61iJS4F_l64laOyHLF3VVzPaFg1UQaWIK1vR13gkxIkBGl4oE1abb5Jqi_kIzTnLahOPW59YRynnWr8WSV7k4IZ2yhMI7Hf8iDQZCPzQ4N5b13J5gPPJrk6wchGyypGJK5bSFppTV2ScOn4oNySQ0j-6OzN8vQF102YaEKemkz05-XU5vF8PdvuNjFYCwJL4Blkt2FjpfUpa6bKOBT0HcvE2dpVNeRnN6w3GnwNijdno1pfXjhBKltpn95RJE3eIMdOhUXqDDGsisN4Au66i7gDwPtZDMAWswGHnb-JTqQ32a9CKT5bvk16OS-3o3x_iuKe9t3tRNIrZ527k9KJQZujT-H7CByznXsfVVDVx5HawEtDgAD-O4OG4h5mmdAksaAypg9yDPf2FMa6STlnOdQkTufGpWuDLHsKvcpnK1w_VowhgNfkkMt1ch-toQ-iES11TGk-c1u1BKoKrBFLse9D2D9UIKHqsKP5F4YkB410u9Byj1XIZV3ENcNXms-foFDaoXIB5mSpVRo-oIc5qxgdnuuM38WpAWbvBm4ea730VMj9hA1Ifz4qKbcCcGzLHm-QuZv1LYuWFOcwZ1hy3MiwQQgWlYwcVZ78VYbc4uRbacmWMhJG8fR0tZQAuDBVLRVKFZViIUYlfZpe9iWf9Wr2q-2YMRCd2gLPCY8micRnGwoZy5LZbk3C4rB6LBKgWl2uMge5umQfhIgREQ_-QSrbDy0tgDwFGbL8avO5EfcjQwngg"
上記コマンドが成功すると、AccessToken
などの情報がレスポンスとして返ってきます。
マネージメントコンソールからユーザを確認すると、ステータスが「FORCE_CHANGE_PASSWORD」から「CONFIRMED」に変わってますね。やりましたね。
さいごに
いかがだったでしょうか。
AWS CLIから「FORCE_CHANGE_PASSWORD」のステータスを「CONFIRMED」に変更する方法を紹介しました。
誰かの参考になれば幸いです。
付録:AWS CLIからユーザを追加する
AWS CLIからtest2
ユーザを追加します。パスワードは仮でPassw0rd!
としています。
$ aws cognito-idp sign-up \ --client-id xxxxxxxxxxxxxxxxxxx \ --username test2 \ --password Passw0rd! \ --user-attributes Name=email,Value=test@admin.com $ aws cognito-idp admin-confirm-sign-up \ --user-pool-id ap-northeast-1_xxxxxxxx \ --username test2 $ aws cognito-idp admin-update-user-attributes \ --user-pool-id ap-northeast-1_xxxxxxxx \ --username test2 \ --user-attributes Name=email_verified,Value=true